#pragma once
#include"RBtree.h"
namespace hu
{
	template<class K,class V>
	class mapoftree
	{
	public:
		const K& operator()(const pair<K,V>& kv)
		{
			return kv.first;
		}
	};
	/*struct MapKeyOfT
	{
		const K& operator()(const pair<K, V>& kv)
		{
			return kv.first;
		}
	};*/

	template<class K,class V>
	class My_map
	{
	public:
		typedef typename RBtree<K, pair<K, V> , mapoftree<K,V>>::iterator iterator;

		void Inorder()
		{
			return _t.InorderR();
		}
		iterator begin()
		{
			return _t.begin();
		}

		iterator end()
		{
			return _t.end();
		}
		bool insert(const pair<K, V>& _kv)
		{
			return _t.insert(_kv);
		}

		V& operator[](const K& key)
		{
			auto ret = _t.find(key);
			if (ret)
			return ret->_data.second;
		}

	private:
		RBtree<K, pair<K, V>, mapoftree<K, V>> _t;
	};
}